/*******************************************************************************
 * Copyright 2007-2014 FZI, http://www.fzi.de
 *                 Forschungszentrum Informatik - Information Process Engineering (IPE)
 *  
 *                 See the NOTICE file distributed with this work for additional
 *                 information regarding copyright ownership
 *                
 *                 Licensed under the Apache License, Version 2.0 (the "License");
 *                 you may not use this file except in compliance with the License.
 *                 You may obtain a copy of the License at
 *                
 *                   http://www.apache.org/licenses/LICENSE-2.0
 *                
 *                 Unless required by applicable law or agreed to in writing, software
 *                 distributed under the License is distributed on an "AS IS" BASIS,
 *                 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *                 See the License for the specific language governing permissions and
 *                 limitations under the License.
 * @author tzentek - <a href="mailto:zentek@fzi.de">Tom Zentek</a>
 * @author cyumusak - <a href="mailto:canyumusak@gmail.com">Can Yumusak</a>
 ******************************************************************************/
package de.fzi.fhemapi.view.vaadin.ui.devicepanels;

import java.util.List;

import de.fzi.fhemapi.model.devicetypes.Device;
import de.fzi.fhemapi.view.vaadin.ui.DeviceDetailsPanel;
import de.fzi.fhemapi.view.vaadin.ui.model.DeviceDetailEntry;

/**
 * This class can be registered at the UI. Each of these classes are checked on it's validity to each device shown and shows the 
 * the content as a device detail.
 * @author Can Yumusak
 *
 */
public abstract class DeviceDetailsAbst {

	Device device;
	DeviceDetailsPanel parent;
	
	/**
	 * A default constructor
	 * @param device the device whose details will be shown.
	 * @param parent the panel.
	 */
	public DeviceDetailsAbst(Device device, DeviceDetailsPanel parent) {
		this.device = device;
		this.parent = parent;
	}
	
	/**
	 * Get the device details as DeviceDetailEntry.
	 * @return a list of device detail entries.
	 */
	public abstract List<DeviceDetailEntry> getDeviceDetails();
	
	/**
	 * Checks whether the device matches to this detail.
	 * @return whether or not it matches.
	 */
	public abstract boolean matchesDevice();

	/**
	 * Returns the device of this detail.
	 * @return the device of this detail.
	 */
	public Device getDevice(){
		return this.device;
	}
	
	/**
	 * sets the device of this detail.
	 * @param device the device.
	 */
	public void setDevice(Device device) {
		this.device = device;
	}
	
	/**
	 * returns the parent of this panel.
	 * @return the parent panel.
	 */
	public DeviceDetailsPanel getParent() {
		return parent;
	}
}
